Fast Curvature
Overview
Find dot-based curvature of curves. Note: tested on geometry at small scales. distance code included to somehow normalize in the future.
Code
if( neighbourcount(0, @ptnum) == 0 ){ return; }
float pow = chf("pow");
string tangent_attrib = chs("tangent_attrib");
int ptvtx = vertexprimindex(0, @vtxnum);
int next = primpoint(0, @primnum, ptvtx+1);
int prev = primpoint(0, @primnum, ptvtx-1);
vector this_dir = point(0, tangent_attrib, @ptnum);
vector this_pos = point(0, "P", @ptnum);
vector next_dir = point(0, tangent_attrib, next);
vector next_pos = point(0, "P", next);
float next_dist = distance(this_pos, next_pos);
v@next_pos = next_pos;
f@next_dist = next_dist;
i@next_pt = next;
vector prev_dir = point(0, tangent_attrib, prev);
vector prev_pos = point(0, "P", prev);
float prev_dist = distance(this_pos, prev_pos);
v@prev_pos = prev_pos;
f@prev_dist = prev_dist;
i@prev_pt = prev;
float dot_next = dot(this_dir, next_dir);
dot_next = 1-dot_next;
//dot_next /= next_dist;
dot_next = pow(dot_next, pow);
float dot_prev = dot(this_dir, prev_dir);
dot_prev = 1-dot_prev;
//dot_prev /= prev_dist;
dot_prev = pow(dot_prev, pow);
float dot = 0;
if( next != -1 && prev != -1 ){
dot = avg(dot_next, dot_prev);
}
if( next == -1 ) dot = dot_prev;
if( prev == -1 ) dot = dot_next;
f@curvature = abs(dot);